import pytest


@pytest.mark.moduleA
@pytest.mark.moduleB
def test_wang():
    print("wang")


# 单个参数名
@pytest.mark.parametrize('a', [1, 2, 3])
@pytest.mark.moduleB
def test_one(a):
    print(a)


# 多个参数名
@pytest.mark.parametrize("a,b", [('a1', 'b1'), ('a2', 'b2'), ('a3', 'b3')])
@pytest.mark.moduleB
@pytest.mark.moduleA
# @pytest.mark.parametrize(['a', 'b'], [('a1', 'b1'), ('a2', 'b2'), ('a3', 'b3')])
# @pytest.mark.parametrize(('a', 'b'), [('a1', 'b1'), ('a2', 'b2'), ('a3', 'b3')])
def test_two(a, b):
    print(a, b)


# 夹具参数化
@pytest.fixture()
def fixture_demo(request):
    return request.param + 1


lst = [1, 2, 3]


# indirect=True,argnames作为参数传入参数名对应的夹具函数
@pytest.mark.parametrize('fixture_demo', lst, indirect=True)
def test_three(fixture_demo):
    print(fixture_demo)


# 堆叠多个parametrize装饰器,在这种情况下，每次调用都会参数化所有先前的参数化。
@pytest.mark.parametrize('a', ['a1', 'a2'])
@pytest.mark.parametrize('b', ['b1', 'b2', 'b3'])
def test_over(a, b):
    print(a, b)
